package ReadNrv;

# ReadNrv.pm 	(pod documentatie volgt)
#
#   classes en methods gebruikt bij het inlezen van .nrv files

require Exporter;
@ISA = Exporter;
@EXPORT = qw(readnrv $nres $nrestr $nstruc);
@EXPORT_OK = qw (@rv);

sub name_data {
local ($t,@fld,$long_name);
$long_name = shift;
@fld = split (/_/,$long_name);
for (@fld) {
  $t .= substr $_,0,1; 
  }
if ($t =~ /\d$/) {	# velden met getal achteraan
  chop $t; $t .= $fld[-1];
  }
$t = lc $t;
}

sub readnrv { 	# hoofd method die aangeroepen wordt. Van hieruit vindt de
		# dispatching plaats.
		
		# input: filehandle, letterpatterns van de te lezen delen
		# output: reference naar array

local ($nrvfile) = shift;
local (@args) = @_;
open (INP, "$nrvfile") || die "Can't open .nrv file $nrvfile : $!";
INP: while (<INP>) {
  next unless (/^\$ DATA/);
  chomp($_);
  local($long) = (split)[2];
  for (@args) {
     if (name_data($long) eq $_) {
	local ($func) = 'read'.name_data($long);
	&$func;  
     }
  }
}

sub readg { 	# DATA general section
		# $nres, $nstruc en $nrestr worden geexporteerd
local ($t,$n); $t = <INP>;	# een lijn mag weg
do {
  $t = <INP>; $n = (split ' ',$t)[-1];
  if ($t =~ /^NRestraints/) { $nrestr = $n; }
  elsif ($t =~ /^NStruct/) { $nstruc = $n; }
  elsif ($t =~ /^NResidues/) { $nres = $n; }
} until ($t =~ /\$ END/);
}

sub readrv {
@rv = ();
local ($t);
$t = <INP>;	# twee lijnen met hoofdingen
$t = <INP>;
while (<INP>) {
  last if (/^\$ END/);
  chomp;
  push (@rv, $_);
}
}


} # package

1;
